/**
 * @author ludesign.bg
   Do Not Change Anything If You Do Not Know What You Are Doing.
   Any changes without the necessary knowledges might occure fatal errros!
 */

var winSize = {
        cWidth:0,
    cHeight:0
};

var scrollPos = {
        posX:0,
        posY:0
};

var objInfo = {
        objName:[]
};

/**
 * sysInfo: retrieve system info object
 */
var sysInfo = {
        getWinSize:function() {
                if( self.innerWidth ) {
                        winSize.cWidth = self.innerWidth;
                        winSize.cHeight = self.innerHeight;
                }
                else if( document.documentElement && document.documentElement.clientWidth ) {
                        winSize.cWidth = document.documentElement.clientWidth;
                        winSize.cHeight = document.documentElement.clientHeight;
                }
                else if( document.body ) {
                        winSize.cWidth = document.body.clientWidth;
                        winSize.cHeight = document.body.clientHeight;
                }
                else {
                        window.alert('Cannot retrieve the window size!');
                }
        },
        getScrollPos:function() {
                if( self.pageYOffset ) {
                        scrollPos.posY = self.pageYOffset;
                }
                else if( document.documentElement && document.documentElement.scrollTop ) {
                        scrollPos.posY = document.documentElement.scrollTop;
                }
                else if( document.body ) {
                        scrollPos.posY = document.body.scrollTop;
                }
                else {
                        window.alert('Cannot retrive the scroll position!');
                }
        },
        center:function( objId ) {

                $(objId).style.left = ( winSize.cWidth - $(objId).offsetWidth ) / 2 + 'px';
                $(objId).style.top  = ( winSize.cHeight - $(objId).offsetHeight ) / 2 + scrollPos.posY + 'px';
        }
};

var ajax = {

        request:false,
        reqComplete:false,
        self:this,

        init:function() {

                if( window.ActiveXObject ) {
                        try {
                                self.request = new ActiveXObject("Msxml2.XMLHTTP");
                        } catch(e) {
                                try {
                                        self.request = new ActiveXObject("Microsoft.XMLHTTP");
                                } catch(e) {}
                        }
                }
                else if( window.XMLHttpRequest ) {
                        self.request = new XMLHttpRequest();
                }
                else if( window.createRequest ) {
                        self.request = window.createRequest();
                }
                else {
                        window.alert('Cannot create HttpRequestObject!');
                }
        },
        doRequest:function( method, url, async, dataRetrieve, reqType ) {

                if( !self.request ) {

                        window.alert('There is no HttpRequestObject!');
                }
                else if( self.request ) {

                        if( method != 'POST' && method != 'GET' ) { method = 'POST'; }
                        else if( url == '' ) {

                                alert('Url is empty!'); self.request = false; return false;
                        }
                        else if( !self.reqComplete ) {

                                $(dataRetrieve).innerHTML = '<h5>Loading... please wait.</h5>';

                                self.reqComplete = true;
                                self.request.open(method, url, async);
                                self.request.setRequestHeader('Content-Type', 'text/html');
                                self.request.send(null);

                                if( async ) {

                                        self.request.onreadystatechange = function() {

                                                if( self.request.readyState == 4 ) {

                                                        if( self.request.status == 200 ) {

                                                                self.reqComplete = false;

                                                                if( reqType == 'validate' ) {

                                                                        //alert(self.request.responseText)

                                                                        on = self.request.responseText;
                                                                        az = on.split('!#!');

                                                                        if( az.length == 1 ) {

                                                                                az = on.split('^&^');
                                                                                if( az.length > 1 ) {

                                                                                        for(j=0; j < objInfo.objName.length; j++) {

                                                                                                $(objInfo.objName[j]).value = '';
                                                                                        }
                                                                                }
                                                                        }

                                                                        $(dataRetrieve).innerHTML = az[0];
                                                                        $(dataRetrieve).style.display = 'block';
                                                                        sysInfo.getWinSize();
                                                                        sysInfo.getScrollPos();
                                                                        sysInfo.center(dataRetrieve);

                                                                        ar = az[1].split('1001');

                                                                        //alert(ar)

                                                                        for(z=0; z < ar.length-1; z++) {

                                                                                $(objInfo.objName[ar[z]]).style.border = '1px solid #ff0000';
                                                                        }

                                                                }
                                                                else if( reqType == 'preview') {

                                                                        $('preview').innerHTML = self.request.responseText;
                                                                        $('contact_us').style.display = 'none';
                                                                        $('preview').style.display = 'block';
                                                                }
                                                        } else {

                                                                alert( 'Error: '+ self.request.status +'\nMessage: '+ self.request.statusText );
                                                                self.request = false; return false;
                                                        }
                                                }
                                        }
                                }
                                else if( !async ) {

                                        self.reqComplete = false;
                                        return self.request.responseText;
                                }
                        }
                        else {
                                //alert('Ajax Request in Progress!');
                        }
                }
        }
};


function validate( act ) {

        info.f_name = $('first_name').value;
        info.l_name = $('last_name').value;
        info.email_addr = $('emailtxt').value;
        info.tel_number = $('tel_num').value;
        info.message = $('message').value;
        info.how = $('how').value;

        required = [ 0, 2, 4, 5 ];

        for(c=0; c < required.length; c++) {
                if( required[c] == 5 ) {
                        $(objInfo.objName[required[c]]).style.border = '0';
                } else {
                        $(objInfo.objName[required[c]]).style.border = '1px solid #5e5e5e';
                }
        }

        num = document.contact_us.prefer;

        for(i=0; i<num.length; i++) {

                if( num[i].checked ) { info.pref = num[i].value; }
                else if( info.pref == null ) { info.pref = 'no'; }
        }

        var params = null;

        info.message.replace(/\n/, '+');

        params = 'f_name='+info.f_name+'&l_name='+info.l_name+'&email_addr='+info.email_addr+'&tel_number='+info.tel_number+'&message='+escape(info.message)+'&pref='+info.pref+'&how='+escape(info.how);
		//alert(params);
        ajax.doRequest('POST', 'send.php?'+params+'&'+act, true, 'errors', act);
}

function init(info) {

        objInfo.objName = info;
}

window.onload = function() {

        ajax.init();
        init( [ 'first_name', 'last_name', 'emailtxt', 'tel_num', 'message', 'prefer', 'how' ] );
}


function $( elId ) {

        return document.getElementById(elId);
}

function switchTo() {

        $('contact_us').style.display = 'block';
        $('preview').style.display = 'none';
}

var info = {

        f_name:null,
        l_name:null,
        email_addr:null,
        tel_number:null,
        message:null,
        pref:null,
        how:null
};